↳ Prolog
↳ PrologToPiTRSProof
perm1_in(L, M) → U1(L, M, eq_len1_in(L, M))
eq_len1_in(.(X, Xs), .(X1, Ys)) → U3(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
eq_len1_in([], []) → eq_len1_out([], [])
U3(X, Xs, X1, Ys, eq_len1_out(Xs, Ys)) → eq_len1_out(.(X, Xs), .(X1, Ys))
U1(L, M, eq_len1_out(L, M)) → U2(L, M, same_sets_in(L, M))
same_sets_in(.(X, Xs), L) → U5(X, Xs, L, member_in(X, L))
member_in(X, .(X1, T)) → U4(X, X1, T, member_in(X, T))
member_in(X, .(X, X1)) → member_out(X, .(X, X1))
U4(X, X1, T, member_out(X, T)) → member_out(X, .(X1, T))
U5(X, Xs, L, member_out(X, L)) → U6(X, Xs, L, same_sets_in(Xs, L))
same_sets_in([], X) → same_sets_out([], X)
U6(X, Xs, L, same_sets_out(Xs, L)) → same_sets_out(.(X, Xs), L)
U2(L, M, same_sets_out(L, M)) → perm1_out(L, M)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
perm1_in(L, M) → U1(L, M, eq_len1_in(L, M))
eq_len1_in(.(X, Xs), .(X1, Ys)) → U3(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
eq_len1_in([], []) → eq_len1_out([], [])
U3(X, Xs, X1, Ys, eq_len1_out(Xs, Ys)) → eq_len1_out(.(X, Xs), .(X1, Ys))
U1(L, M, eq_len1_out(L, M)) → U2(L, M, same_sets_in(L, M))
same_sets_in(.(X, Xs), L) → U5(X, Xs, L, member_in(X, L))
member_in(X, .(X1, T)) → U4(X, X1, T, member_in(X, T))
member_in(X, .(X, X1)) → member_out(X, .(X, X1))
U4(X, X1, T, member_out(X, T)) → member_out(X, .(X1, T))
U5(X, Xs, L, member_out(X, L)) → U6(X, Xs, L, same_sets_in(Xs, L))
same_sets_in([], X) → same_sets_out([], X)
U6(X, Xs, L, same_sets_out(Xs, L)) → same_sets_out(.(X, Xs), L)
U2(L, M, same_sets_out(L, M)) → perm1_out(L, M)
PERM1_IN(L, M) → U11(L, M, eq_len1_in(L, M))
PERM1_IN(L, M) → EQ_LEN1_IN(L, M)
EQ_LEN1_IN(.(X, Xs), .(X1, Ys)) → U31(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
EQ_LEN1_IN(.(X, Xs), .(X1, Ys)) → EQ_LEN1_IN(Xs, Ys)
U11(L, M, eq_len1_out(L, M)) → U21(L, M, same_sets_in(L, M))
U11(L, M, eq_len1_out(L, M)) → SAME_SETS_IN(L, M)
SAME_SETS_IN(.(X, Xs), L) → U51(X, Xs, L, member_in(X, L))
SAME_SETS_IN(.(X, Xs), L) → MEMBER_IN(X, L)
MEMBER_IN(X, .(X1, T)) → U41(X, X1, T, member_in(X, T))
MEMBER_IN(X, .(X1, T)) → MEMBER_IN(X, T)
U51(X, Xs, L, member_out(X, L)) → U61(X, Xs, L, same_sets_in(Xs, L))
U51(X, Xs, L, member_out(X, L)) → SAME_SETS_IN(Xs, L)
perm1_in(L, M) → U1(L, M, eq_len1_in(L, M))
eq_len1_in(.(X, Xs), .(X1, Ys)) → U3(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
eq_len1_in([], []) → eq_len1_out([], [])
U3(X, Xs, X1, Ys, eq_len1_out(Xs, Ys)) → eq_len1_out(.(X, Xs), .(X1, Ys))
U1(L, M, eq_len1_out(L, M)) → U2(L, M, same_sets_in(L, M))
same_sets_in(.(X, Xs), L) → U5(X, Xs, L, member_in(X, L))
member_in(X, .(X1, T)) → U4(X, X1, T, member_in(X, T))
member_in(X, .(X, X1)) → member_out(X, .(X, X1))
U4(X, X1, T, member_out(X, T)) → member_out(X, .(X1, T))
U5(X, Xs, L, member_out(X, L)) → U6(X, Xs, L, same_sets_in(Xs, L))
same_sets_in([], X) → same_sets_out([], X)
U6(X, Xs, L, same_sets_out(Xs, L)) → same_sets_out(.(X, Xs), L)
U2(L, M, same_sets_out(L, M)) → perm1_out(L, M)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
PERM1_IN(L, M) → U11(L, M, eq_len1_in(L, M))
PERM1_IN(L, M) → EQ_LEN1_IN(L, M)
EQ_LEN1_IN(.(X, Xs), .(X1, Ys)) → U31(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
EQ_LEN1_IN(.(X, Xs), .(X1, Ys)) → EQ_LEN1_IN(Xs, Ys)
U11(L, M, eq_len1_out(L, M)) → U21(L, M, same_sets_in(L, M))
U11(L, M, eq_len1_out(L, M)) → SAME_SETS_IN(L, M)
SAME_SETS_IN(.(X, Xs), L) → U51(X, Xs, L, member_in(X, L))
SAME_SETS_IN(.(X, Xs), L) → MEMBER_IN(X, L)
MEMBER_IN(X, .(X1, T)) → U41(X, X1, T, member_in(X, T))
MEMBER_IN(X, .(X1, T)) → MEMBER_IN(X, T)
U51(X, Xs, L, member_out(X, L)) → U61(X, Xs, L, same_sets_in(Xs, L))
U51(X, Xs, L, member_out(X, L)) → SAME_SETS_IN(Xs, L)
perm1_in(L, M) → U1(L, M, eq_len1_in(L, M))
eq_len1_in(.(X, Xs), .(X1, Ys)) → U3(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
eq_len1_in([], []) → eq_len1_out([], [])
U3(X, Xs, X1, Ys, eq_len1_out(Xs, Ys)) → eq_len1_out(.(X, Xs), .(X1, Ys))
U1(L, M, eq_len1_out(L, M)) → U2(L, M, same_sets_in(L, M))
same_sets_in(.(X, Xs), L) → U5(X, Xs, L, member_in(X, L))
member_in(X, .(X1, T)) → U4(X, X1, T, member_in(X, T))
member_in(X, .(X, X1)) → member_out(X, .(X, X1))
U4(X, X1, T, member_out(X, T)) → member_out(X, .(X1, T))
U5(X, Xs, L, member_out(X, L)) → U6(X, Xs, L, same_sets_in(Xs, L))
same_sets_in([], X) → same_sets_out([], X)
U6(X, Xs, L, same_sets_out(Xs, L)) → same_sets_out(.(X, Xs), L)
U2(L, M, same_sets_out(L, M)) → perm1_out(L, M)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
MEMBER_IN(X, .(X1, T)) → MEMBER_IN(X, T)
perm1_in(L, M) → U1(L, M, eq_len1_in(L, M))
eq_len1_in(.(X, Xs), .(X1, Ys)) → U3(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
eq_len1_in([], []) → eq_len1_out([], [])
U3(X, Xs, X1, Ys, eq_len1_out(Xs, Ys)) → eq_len1_out(.(X, Xs), .(X1, Ys))
U1(L, M, eq_len1_out(L, M)) → U2(L, M, same_sets_in(L, M))
same_sets_in(.(X, Xs), L) → U5(X, Xs, L, member_in(X, L))
member_in(X, .(X1, T)) → U4(X, X1, T, member_in(X, T))
member_in(X, .(X, X1)) → member_out(X, .(X, X1))
U4(X, X1, T, member_out(X, T)) → member_out(X, .(X1, T))
U5(X, Xs, L, member_out(X, L)) → U6(X, Xs, L, same_sets_in(Xs, L))
same_sets_in([], X) → same_sets_out([], X)
U6(X, Xs, L, same_sets_out(Xs, L)) → same_sets_out(.(X, Xs), L)
U2(L, M, same_sets_out(L, M)) → perm1_out(L, M)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
MEMBER_IN(X, .(X1, T)) → MEMBER_IN(X, T)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PiDP
MEMBER_IN(X, .(X1, T)) → MEMBER_IN(X, T)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
U51(X, Xs, L, member_out(X, L)) → SAME_SETS_IN(Xs, L)
SAME_SETS_IN(.(X, Xs), L) → U51(X, Xs, L, member_in(X, L))
perm1_in(L, M) → U1(L, M, eq_len1_in(L, M))
eq_len1_in(.(X, Xs), .(X1, Ys)) → U3(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
eq_len1_in([], []) → eq_len1_out([], [])
U3(X, Xs, X1, Ys, eq_len1_out(Xs, Ys)) → eq_len1_out(.(X, Xs), .(X1, Ys))
U1(L, M, eq_len1_out(L, M)) → U2(L, M, same_sets_in(L, M))
same_sets_in(.(X, Xs), L) → U5(X, Xs, L, member_in(X, L))
member_in(X, .(X1, T)) → U4(X, X1, T, member_in(X, T))
member_in(X, .(X, X1)) → member_out(X, .(X, X1))
U4(X, X1, T, member_out(X, T)) → member_out(X, .(X1, T))
U5(X, Xs, L, member_out(X, L)) → U6(X, Xs, L, same_sets_in(Xs, L))
same_sets_in([], X) → same_sets_out([], X)
U6(X, Xs, L, same_sets_out(Xs, L)) → same_sets_out(.(X, Xs), L)
U2(L, M, same_sets_out(L, M)) → perm1_out(L, M)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
U51(X, Xs, L, member_out(X, L)) → SAME_SETS_IN(Xs, L)
SAME_SETS_IN(.(X, Xs), L) → U51(X, Xs, L, member_in(X, L))
member_in(X, .(X1, T)) → U4(X, X1, T, member_in(X, T))
member_in(X, .(X, X1)) → member_out(X, .(X, X1))
U4(X, X1, T, member_out(X, T)) → member_out(X, .(X1, T))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
SAME_SETS_IN(.(X, Xs), L) → U51(Xs, L, member_in(X, L))
U51(Xs, L, member_out) → SAME_SETS_IN(Xs, L)
member_in(X, .(X1, T)) → U4(member_in(X, T))
member_in(X, .(X, X1)) → member_out
U4(member_out) → member_out
member_in(x0, x1)
U4(x0)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
EQ_LEN1_IN(.(X, Xs), .(X1, Ys)) → EQ_LEN1_IN(Xs, Ys)
perm1_in(L, M) → U1(L, M, eq_len1_in(L, M))
eq_len1_in(.(X, Xs), .(X1, Ys)) → U3(X, Xs, X1, Ys, eq_len1_in(Xs, Ys))
eq_len1_in([], []) → eq_len1_out([], [])
U3(X, Xs, X1, Ys, eq_len1_out(Xs, Ys)) → eq_len1_out(.(X, Xs), .(X1, Ys))
U1(L, M, eq_len1_out(L, M)) → U2(L, M, same_sets_in(L, M))
same_sets_in(.(X, Xs), L) → U5(X, Xs, L, member_in(X, L))
member_in(X, .(X1, T)) → U4(X, X1, T, member_in(X, T))
member_in(X, .(X, X1)) → member_out(X, .(X, X1))
U4(X, X1, T, member_out(X, T)) → member_out(X, .(X1, T))
U5(X, Xs, L, member_out(X, L)) → U6(X, Xs, L, same_sets_in(Xs, L))
same_sets_in([], X) → same_sets_out([], X)
U6(X, Xs, L, same_sets_out(Xs, L)) → same_sets_out(.(X, Xs), L)
U2(L, M, same_sets_out(L, M)) → perm1_out(L, M)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
EQ_LEN1_IN(.(X, Xs), .(X1, Ys)) → EQ_LEN1_IN(Xs, Ys)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
EQ_LEN1_IN(.(X, Xs), .(X1, Ys)) → EQ_LEN1_IN(Xs, Ys)
From the DPs we obtained the following set of size-change graphs: